今天宠物迷的小编给各位宠物饲养爱好者分享spring 事务 作用的宠物知识,其中也会对Spring有什么好处?(spring到底有什么用)进行专业的解释,如果能碰巧解决你现在面临的宠物相关问题,别忘了关注本站哦,现在我们开始吧!
在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因 为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语 句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts 负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的 依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和 Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正 是用在此处。 Spring的Ioc(控制反转和依赖注入) 控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直 接操控。 依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注 入到组件之中。 从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的 业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的 方法接口就可以了。而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期, 甚至是一些业务流程都是由Action来控制的。层与层之间耦合性太紧密了,既降低了数据访 问的效率又使业务逻辑看起来很复杂,代码量也很多。,Spring容器控制所有Action对象和 业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦, 使程序运行起来效率更高,维护起来也方便。 使用Spring的第二个好处(AOP应用): 事务的处理: 在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在 Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能, 包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理, 大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管 理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对 SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对 SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免 了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的 Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使 开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用Spirng AOP隔离降低了 程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。
IOC的基本概念是:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。Spring容器负责将这些联系在一起。也就是说,Spring的IOC负责管理各种对象的创建、清除以及它们之间的联系。AOP是指面向切面编程(也叫面向方面),可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。一般用于事务管理、权限控制、错误处理等各种业务**同性的东西。
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。 这样可以防止出现脏数据,防止数据库数据出现问题。 开发中为了避免这种情况一般都会进行事务管理。 在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。 Hibernate中是通过Transaction进行事务管理,处理方法与JDBC中类似。 Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
数据库(比如ORACLE) 事务的特征 ACID,指数据库事务正确执行的四个基本要素的缩写. 包含:**性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 一个支持交易(Transaction)的数据库系统,必需要具有这四种特性,否则在交易过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求. 1、**性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。 2、一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。 3、隔离性(Isolation):事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的。 4、持久性(Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出现故障。 一 事务处理介绍 事务是这样一种机制,它确保多个SQL语句被当作单个工作单元来处理。事务具有以下的作用: * 一致性:同时进行的查询和更新彼此不会发生冲突,其他用户不会看到发生了变化但尚未提交的数据。 * 可恢复性:一旦系统故障,数据库会自动地完全恢复未完成的事务。 二 事务与一致性 事务是完整性的单位,一个事务的执行是把数据库从一个一致的状态转换成另一个一致的状态。因此,如果事务孤立执行时是正确的,但如果多个事务并发交错地执行,就可能相互干扰,造成数据库状态的不一致。在多用户环境中,数据库必须避免同时进行的查询和更新发生冲突。这一点是很重要的,如果正在被处理的数据能够在该处理正在运行时被另一用户的修改所改变,那么该处理结果是不明确的。 不加控制的并发存取会产生以下几种错误: 1 丢失修改(lost updates) 当多个事务并发修改一个数据时,不加控制会得出错误的结果,一个修改会覆盖掉另一个修改。 2 读的不可重复性 当多个事务按某种时间顺序存取若干数据时,如果对并发存取不加控制,也会产生错误。 3 脏读(DIRDY DATA),读的不一致性 4 光标带来的当前值的混乱 事务在执行过程中它在某个表上的当前查找位置是由光标表示的。光标指向当前正处理的记录。当处理完该条记录后,则指向下一条记录。在多个事务并发执行时,某一事务的修改可能产生负作用,使与这些光标有关的事务出错。 5 未释放修改造成连锁退出 一个事务在进行修改操作的过程中可能会发生故障,这时需要将已做的修改回退(Rollback)。如果在已进行过或已发现错误尚未复原之前允许其它事务读已做过修改(脏读),则会导致连锁退出。 6 一事务在对一表更新时,另外的事务却修改或删除此表的定义。 数据库会为每个事务自动地设置适当级别的锁定。对于前面讲述的问题:脏读、未释放修改造成的连锁退出、一事务在对一表更新时另外的事务却修改或删除此表的定义,数据库都会自动解决。而另外的三个问题则需要在编程过程中人为地定义事务或加锁来解决。 三 事务和恢复 数据库本身肩负着管理事务的责任。事务是最小的逻辑工作单元,在这个工作单元中,对数据库的所有更新工作,要么必须全部成功,要么必须全部失败(回退)。只要应用程序指定了某段程序为一个事务并做了相应的处理(提交或回退),数据库系统会自动维护事务本身的特性。 四 数据库(比如ORACLE)数据库的事务定义 数据库(比如ORACLE)事务从COMMIT、ROLLBACK、连接到数据库或开始第一条可执行的SQL语句时开始,到一条COMMIT、ROLLBACK语句或退出数据库时结束。如果在一个事务中包含DDL语句,则在DDL语句的前后都会隐含地执行COMMIT语句,从而开始或结束一个事务。 如果一个事务由于某些故障或者由于用户改变主意而必须在提交前取消它,则数据库被恢复到这些语句和过程执行之前的状态。 利用ROLLBACK语句可以在COMMIT命令前随时撤消或回退一个事务。可以回退整个事务,也可以会退部分事务,但是不能回退一个已经被提交的事务。回退部分事务的ROLLBACK命令为: ROLLBACK to savepoint 存储点名 存储点是用户放入事务中的标记,用来表示一个可被回退的位置。存储点通过在事务中放入一个SAVEPOINT命令而**入。该命令的语法是: SAVEPOINT 存储点名 如果在ROLLBACK语句中没有给出存储点名,则整个事务被回退。 Spring的声明式事务 不是说你声明的方法都加入同一个事务,而是每一个方法一个事务,**性操作方法在该方法内部调用.一般事务简单的讲就是对数据库表的添加、删除、修改和查询操作。。。事务具有**性 事务中包含的添加、删除、更新等操作要么全部做完 要么全部都不做,以保证数据库的一致性和正确性 举个例子说:银行账户,你首先查看还有1000元,然后你要取500元钱,在你取钱时取款机出问题,你没能取成500元钱,这时就会回滚,不会说因为这样你下次再查看的时候就只有500了 ....还有,你在前台和取款机前同时去现,其操作只有其一能完成(隔离性:事务往往是存在并发的。为了简化系统编写的难度,系统必须保证事务之间是相互隔离的,即在一个事务执行时,开发人员不需要关心是否并发。)!!
事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。
在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。
Hibernate中是通过Transaction进行事务管理,处理方法与JDBC中类似。
Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因 为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语 句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts 负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的 依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和 Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正 是用在此处。 Spring的Ioc(控制反转和依赖注入) 控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直 接操控。 依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注 入到组件之中。 从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的 业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的 方法接口就可以了。而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期, 甚至是一些业务流程都是由Action来控制的。层与层之间耦合性太紧密了,既降低了数据访 问的效率又使业务逻辑看起来很复杂,代码量也很多。,Spring容器控制所有Action对象和 业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦, 使程序运行起来效率更高,维护起来也方便。 使用Spring的第二个好处(AOP应用): 事务的处理: 在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在 Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能, 包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理, 大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管 理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对 SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对 SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免 了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的 Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使 开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用Spirng AOP隔离降低了 程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。
在SSH框假中spring充当了管理容器的角色。我们都知道Hibernate用来做持久层,因 为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语 句。Struts是用来做应用层的,他它负责调用业务逻辑serivce层。所以SSH框架的流程大致 是:Jsp页面----Struts------Service(业务逻辑处理类)---Hibernate(左到右)struts 负责控制Service(业务逻辑处理类),从而控制了Service的生命周期,这样层与层之间的 依赖和强,属于耦合。这时,使用spring框架就起到了控制Action对象(Strus中的)和 Service类的作用,两者之间的关系就松散了,Spring的Ioc机制(控制反转和依赖注入)正 是用在此处。 Spring的Ioc(控制反转和依赖注入) 控制反转:就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直 接操控。 依赖注入:组件之间的依赖关系由容器在运行期决定 ,由容器动态的将某种依赖关系注 入到组件之中。 从上面我们不难看出:从头到尾Action仅仅是充当了Service的控制工具,这些具体的 业务方法是怎样实现的,他根本就不会管,也不会问,他只要知道这些业务实现类所提供的 方法接口就可以了。而在以往单独使用Struts框架的时候,所有的业务方法类的生命周期, 甚至是一些业务流程都是由Action来控制的。层与层之间耦合性太紧密了,既降低了数据访 问的效率又使业务逻辑看起来很复杂,代码量也很多。,Spring容器控制所有Action对象和 业务逻辑类的生命周期,由与上层不再控制下层的生命周期,层与层之间实现了完全脱耦, 使程序运行起来效率更高,维护起来也方便。 使用Spring的第二个好处(AOP应用): 事务的处理: 在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在 Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能, 包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理, 大大减少了程序员的代码量,也对事务有了很好的管理控制。Hibernate中也有对事务的管 理,hibernate中事务管理是通过SessionFactory创建和维护Session来完成。而Spring对 SessionFactory配置也进行了整合,不需要在通过hibernate.cfg.xml来对 SessionaFactory进行设定。这样的话就可以很好的利用Sping对事务管理强大功能。避免 了每次对数据操作都要现获得Session实例来启动事务/提交/回滚事务还有繁琐的 Try/Catch操作。这些也就是Spring中的AOP(面向切面编程)机制很好的应用。一方面使 开发业务逻辑更清晰、专业分工更加容易进行。另一方面就是应用Spirng AOP隔离降低了 程序的耦合性使我们可以在不同的应用中将各个切面结合起来使用大大提高了代码重用度。
首先 @Transaction 是属于 Spring部分的 下面来说说使用 spring中的@Transaction配置详解 1、Spring默认Transactional事物管理机制 如果程序抛出的是运行期例外,则数据回滚 事物处理 如果是重新Exception例外,则数据不会滚。 可以通过配置修改该规则 @Transactional(noRollbackFor=RuntimeException.class)方法事物说明 @Transactional(RollbackFor=Exception.clas) @Transactional(readyOnly=true) @Transactional(timeout=100)默认30 @Transactional(isolation)数据库的隔离级别 { Read Uncommited:读取未提交的数据(会出现脏读 不可重复读 幻读) Read Commited:读已提交的数据(会出现不可重复读和幻读) Repeatable Read:可重复读(会出现幻读) Serializable:串行化 } 脏读:一个事务读取到另外一个事务未提交的更新的数据 不可重复读:在同一个事务中,多次读取同一个数据返回结果有所不同,就是后续的读取可以读到另外一个事务的已经提交的更新数据 可重复读:在同一个事务多次读取数据时,能够保证所读取的数据一样,也就是后读取的不能读到另外一个事务已经提交的数据 幻读: 一个事务读取到另外一个事务已经提交的更新的数据 针对查询方法 @Transactional(propagation=Propagation.NOT_SUPPORTED)针对某个方法不开启事务 @Transactional(propagation=Propagation.REQUIRED)spring默认的事务支持 Propagation参数解析 1、REQUIRED:业务方法需要在一个事务中运行。如果方法运行中,已经处在一个事务中,那么加入到该事务,否则为自己创建一个新的事务。 2、NOT_SUPPORIED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。 3、REQUIRES_NEW:属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务会被挂起, 新的事务会被创建,直到方法执行结束,新事务才算结束,原先的事务才会恢复执行。 4、MANDATORY:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果业务方法在没有事务的环境下调用,容器会抛出例外。 5、SUPPORTS:这一事务属性表明,如果业务方法在某一个事务范围内被调用,则方法成为该事务的一部分。如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行。 6、NEVER:指定业务方法绝对不能在事务范围内执行。如果业务方法在某个事务中执行,容器会抛出例外,只有业务方法没有关联到任何事务,才能正常执行。 7、NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按REQUIRED属性执行,它使用了一个单独事的事务, 这个事务拥有多个 可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只会对DataSourceTransactionManager事务管理器起效。
Spring的7种事务传播行为类型
原创 2016年10月19日 16:50:34
标签:
PROPAGATION
2055
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。‘
3、PROPAGATION_MANDATORY:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。
4、PROPAGATION_REQUIRES_NEW:创建新事务,无论当前存不存在事务,都创建新事务。
5、PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
7、PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED
本文由宠物迷 百科常识栏目发布,非常欢迎各位朋友分享到个人朋友圈,但转载请说明文章出处“Spring有什么好处?”
上一篇
2020浙江外贸出口十强?
下一篇
公园哪里没有摄像头?